#import <UIKit/UIKit.h>
#import "YoLoadingHelpView.h"

NS_ASSUME_NONNULL_BEGIN

@interface BaseViewController : UIViewController

@property (assign, nonatomic) BOOL hideNaviBar;

//-----------属性----------
///默认屏幕一样大小，需要更改设置frame再添加
@property (strong, nonatomic) YoLoadingHelpView *defaultEmptyView;

//----------------- Nav bottom shadow -------------------
///需要阴影就调用该方法(在setupView之后)
-(void)addNavigationShadow;
///导航栏阴影(在setupView之后 特殊颜色)
- (void)addNavigationShadowWithColor:(UIColor *)color;
///导航栏下的分割线(在setupView之后)
-(void)addSpliteLine;

//----------------- Nav left button -------------------

///返回按钮，可以重新添加事件
-(void)goBack;
///隐藏左边的返回按钮
-(void)hideLeftNavBtn;
///跳转下一个控制器
- (void)pushVc:(UIViewController *)vc;

//-----------------Nav right button ------------------

///自定义导航栏右边的按钮--文字
-(void)initRightNavBtnWithText:(NSString *)text;
///自定义导航栏右边的按钮--文字，大小
-(void)initRightNavBtnWithText:(NSString *)text font:(float)font;
///自定义导航栏右边的按钮--文字，颜色
-(void)initRightNavBtnWithText:(NSString *)text textColor:(UIColor *)textColor;
///自定义导航栏右边的按钮--文字，文字偏移
-(void)initRightNavBtnWithText:(NSString *)text edgn:(UIEdgeInsets)edgn;
///自定义导航栏右边的按钮--文字d，大小，颜色，偏移
-(void)initRightNavBtnWithText:(NSString *)text font:(float)font textColor:(UIColor *)color edgn:(UIEdgeInsets)edgn;
///带字重
-(void)initRightNavBtnWithText:(NSString *)text font:(float)font textColor:(UIColor *)color edgn:(UIEdgeInsets)edgn wight:(UIFontWeight)wight;
///自定义导航栏右边的按钮--图片
-(void)initRightNavBtnWithImg:(NSString *)imgName;
///自定义导航栏右边的按钮--图片偏移
-(void)initRightNavBtnWithImg:(NSString *)imgName edgn:(UIEdgeInsets)edgn;
///自定义导航栏右边的按钮 --背景颜色 大小
-(void)initRightNavBtnWithText:(NSString *)text font:(float)font textColor:(UIColor *)color backgroundColor:(UIColor *)bgColor frame:(CGRect) frame;
///导航栏右边的按钮
-(void)topMoreClick;

-(void)topMoreClick:(UIButton *)btn;

//------------------ MB Loading And Toast ---------------

///loading（转菊花）
-(void)mbShowLoading;
///loading的时候下面展示文字(默认添加在self.view 上)；
-(void)mbShowLoadingText:(NSString *)text;
///可以选择是否弹在window上
-(void)mbShowLoadingText:(NSString *)text onWindow:(BOOL)window;
///Toast 提示框2秒后消失(默认添加在self.view 上)；
-(void)mbShowToast:(NSString *)text;
///Toast 可选择是否弹出在window上
-(void)mbShowToast:(NSString *)text onWindow:(BOOL)window;
///错误提示框 2秒后消失
-(void)mbShowError:(NSError *)error;
///mb 消失的方法
-(void)mbDismiss;

//------------------ 侧滑事件 ---------------
//Notice  在根控制器或者一级控制器要禁用侧滑返回，要不然会导致界面卡死

///开启侧滑返回
-(void)OpenSilderBack;

///禁用侧滑返回在viewDudidAppera里面实现即可
-(void)CloseSilderBack;

////设置子视图
- (void)setUpSubViews;


///关闭当前界面，跳转到下个界面
-(void)jumpViewControllerAndCloseSelf:(UIViewController *)vc;


-(void)jumpViewControllerAndCloseSelf:(UIViewController *)vc index:(int)index;

//------------------ 挡板功能 ----------------

@property (strong, nonatomic) YoLoadingHelpView *loadingHelp;

///初始化挡板(如果只需要弹出空界面可以不用初始化)
-(void)initYoLoadingHelp;

///初始化挡板(挡板弹在视图的位置，为空则弹在self.View上）
-(void)initYoLoadingHelpWithSupreView:(UIView * _Nullable )supView;

///初始化挡板(自定义挡板的大小）
-(void)initYoLoadingHelpWithFarme:(CGRect)frame isShowLoading:(BOOL)isShow;

///初始化挡板(自定义挡板的大小和弹出位置）
-(void)initYoLoadingHelpWithFarme:(CGRect)frame withSuperView:(UIView * _Nullable )supView isShowLoading:(BOOL)isShow;

///加载挡板
-(void)yoShowLoading;

///挡板上弹出错误信息（特指网络错误的情况）
-(void)yoShowError;

///判断是何种错误，并展示相应的挡板
-(void)autoError:(BOOL)netWork msg:(NSString *)msg;

///挡板上弹出空界面
-(void)yoShowEmpty:(LoadingHelpType)type;

-(void)yoShowEmpty:(LoadingHelpType)type withFrame:(CGRect)frame;

///挡板上弹出空界面（如果初始化指定了挡板的父视图则调用上面的方法），没调初始化方法则调用这个即可
-(void)yoShowEmpty:(LoadingHelpType)type withSuperView:(UIView *)supView;

///隐藏挡板
-(void)yoDismiss;

///网络错误重新加载的方法，如果不是写在httpLoadData里面的话，子类要重写这个方法，调用一下网络加载
-(void)yoLoadingErrorReload;

///空数据点击按钮的方法
-(void)yoEmptyClick;

///网络请求，若网络请求在此方法下调用的，没有重写yoLoadingErrorReload的话，点击网络错误会再次加载这个方法
-(void)httpLoadData;

///传入需要解析的数据，返回数据，
-(NSMutableArray *)dataAlaysis:(id)value withModel:(Class)model;

@property (assign, nonatomic) BOOL closeSilder;

@end

NS_ASSUME_NONNULL_END
